home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Franz PD
/
Franz PD Disk #051 (1990)(Amiga User Group Deutschland e.V.).zip
/
Franz PD Disk #051 (1990)(Amiga User Group Deutschland e.V.).adf
/
Pyramide
/
Pyramide
(
.txt
)
< prev
next >
Wrap
AmigaBASIC Source Code
|
1989-07-02
|
20KB
|
855 lines
acbmname$="spielbild"
REM IF FRE(1)<30000& THEN CLEAR,,30000&
DIM bPlane&(5), cTabWork%(32), cTabSave%(32)
DECLARE FUNCTION xOpen& LIBRARY
DECLARE FUNCTION xRead& LIBRARY
DECLARE FUNCTION xWrite& LIBRARY
DECLARE FUNCTION AllocMem&() LIBRARY
LIBRARY "dos.library"
LIBRARY "exec.library"
LIBRARY "graphics.library"
loadError$ = ""
GOSUB LoadACBM
IF loadError$ <> "" THEN GOTO Mcleanup
IF foundCCRT AND ccrtDir% THEN
FOR kk = 0 TO nColors% -1
cTabSave%(kk) = PEEKW(colorTab&+(kk*2))
cTabWork%(kk) = cTabSave%(kk)
NEXT
FOR kk = 0 TO 80
IF ccrtDir% = 1 THEN
GOSUB Fcycle
ELSE
GOSUB Bcycle
END IF
CALL LoadRGB4&(sViewPort&,VARPTR(cTabWork%(0)),nColors%)
FOR de1 = 0 TO ccrtSecs& * 3000
FOR de2 = 0 TO ccrtMics& / 500
NEXT
NEXT
NEXT
CALL LoadRGB4&(sViewPort&,VARPTR(cTabSave%(0)),nColors%)
END IF
Mcleanup:
GOTO spielanfang:
Mcleanup2:
REM LIBRARY CLOSE
IF loadError$ <> "" THEN PRINT loadError$
END
cTemp% = cTabWork%(ccrtEnd%)
FOR jj = ccrtEnd%-1 TO ccrtStart% STEP -1
cTabWork%(jj+1) = cTabWork%(jj)
NEXT
cTabWork%(ccrtStart%) = cTemp%
RETURN
Fcycle: '" Farbzyklus vorwärts (forward)
cTemp% = cTabWork%(ccrtStart%)
FOR jj = ccrtStart%+1 TO ccrtEnd%
cTabWork%(jj-1) = cTabWork%(jj)
NEXT
cTabWork%(ccrtEnd%) = cTemp%
RETURN
LoadACBM:
'" - Folgende Variablen müssen
'" - initialisiert sein:
REM - ACBMname$ (ACBM-Dateiname)
REM - Variablen initialisieren
f$ = acbmname$
fHandle& = 0
mybuf& = 0
foundBMHD = 0
foundCMAP = 0
foundCAMG = 0
foundCCRT = 0
foundABIT = 0
REM - aus include/libraries/dos.h
REM - MODE_NEWFILE = 1006
REM - MODE_OLDFILE = 1005
filename$ = f$ + CHR$(0)
fHandle& = xOpen&(SADD(filename$),1005)
IF fHandle& = 0 THEN
loadError$ = "Eingabedatei nicht gefunden/lesbar."
GOTO Lcleanup
END IF
REM - Pufferspeicherplatz reservieren
ClearPublic& = 65537
mybufsize& = 360
mybuf& = AllocMem&(mybufsize&,ClearPublic&)
IF mybuf& = 0 THEN
loadError$ = "Pufferspeicherplatz nicht verfügbar."
GOTO Lcleanup
END IF
inbuf& = mybuf&
cbuf& = mybuf& + 120
ctab& = mybuf& + 240
REM - Eingabe sollte lauten FORMnnnnACBM
rLen& = xRead&(fHandle&,inbuf&,12)
tt$ = ""
FOR kk = 8 TO 11
tt% = PEEK(inbuf& + kk)
tt$ = tt$ + CHR$(tt%)
NEXT
IF tt$ <> "ACBM" THEN
loadError$ = "Keine ACBM-Grafikdatei."
GOTO Lcleanup
END IF
REM - ACBM-Datei Chunk-weise lesen
ChunkLoop:
REM - Chunk-Name/Länge ermitteln
rLen& = xRead&(fHandle&,inbuf&,8)
icLen& = PEEKL(inbuf& + 4)
tt$ = ""
FOR kk = 0 TO 3
tt% = PEEK(inbuf& + kk)
tt$ = tt$ + CHR$(tt%)
NEXT
IF tt$ = "BMHD" THEN 'BitMap-Header
foundBMHD = 1
rLen& = xRead&(fHandle&,inbuf&,icLen&)
iWidth% = PEEKW(inbuf&)
iHeight% = PEEKW(inbuf& + 2)
iDepth% = PEEK(inbuf& + 8)
iCompr% = PEEK(inbuf& + 10)
scrWidth% = PEEKW(inbuf& + 16)
scrHeight% = PEEKW(inbuf& + 18)
iRowBytes% = iWidth% /8
scrRowBytes% = scrWidth% / 8
nColors% = 2^(iDepth%)
'" - Genug Platz für Videospeicher ?
AvailRam& = FRE(-1)
NeededRam& = ((scrWidth%/8)*scrHeight%*(iDepth%+1))+5000
IF AvailRam& < NeededRam& THEN
loadError$ = "Speicherplatz reicht nicht aus."
GOTO Lcleanup
END IF
kk = 1
IF scrWidth% > 320 THEN kk = kk + 1
IF scrHeight% > 200 THEN kk = kk + 2
SCREEN 2,scrWidth%,scrHeight%,5,1
WINDOW 2,"",,0,2
CALL freesprite (0)
REM - Adressen von Screen-Structures ermitteln
GOSUB GetScrAddrs
REM - Schirm während Ladevorgang dunkel
CALL LoadRGB4&(sViewPort&,ctab&,nColors%)
ELSEIF tt$ = "CMAP" THEN 'Farbpalette
foundCMAP = 1
rLen& = xRead&(fHandle&,cbuf&,icLen&)
REM - Farbpalette aufbauen
FOR kk = 0 TO nColors% - 1
red% = PEEK(cbuf&+(kk*3))
gre% = PEEK(cbuf&+(kk*3)+1)
blu% = PEEK(cbuf&+(kk*3)+2)
regTemp% = (red%*16)+(gre%)+(blu%/16)
POKEW(ctab&+(2*kk)),regTemp%
NEXT
ELSEIF tt$ = "CAMG" THEN 'Amiga ViewPort Modes
foundCAMG = 1
rLen& = xRead&(fHandle&,inbuf&,icLen&)
camgModes& = PEEKL(inbuf&)
ELSEIF tt$ = "CCRT" THEN 'Graphicraft-Farbzyklus-Daten
foundCCRT = 1
rLen& = xRead&(fHandle&,inbuf&,icLen&)
ccrtDir% = PEEKW(inbuf&)
ccrtStart% = PEEK(inbuf& + 2)
ccrtEnd% = PEEK(inbuf& + 3)
ccrtSecs& = PEEKL(inbuf& + 4)
ccrtMics& = PEEKL(inbuf& + 8)
ELSEIF tt$ = "ABIT" THEN 'Contiguous BitMap
foundABIT = 1
'" - Hier werden nur volle BitMaps verarbeitet, keine
'" - Ausschnitte wie z.B. Pinsel (Brushes).
'" - Sehr schnell, liest ganze BitPlanes.
plSize& = (scrWidth%/8) * scrHeight%
FOR pp = 0 TO iDepth% -1
rLen& = xRead&(fHandle&,bPlane&(pp),plSize&)
NEXT
ELSE
REM - unbekannten Chunk-Typ lesen
FOR kk = 1 TO icLen&
rLen& = xRead&(fHandle&,inbuf&,1)
NEXT
'" - Wenn Länge ungerade, noch 1 Byte lesen
IF (icLen& OR 1) = icLen& THEN
rLen& = xRead&(fHandle&,inbuf&,1)
END IF
END IF
REM - Fertig, wenn alle Chunks gelesen
IF foundBMHD AND foundCMAP AND foundABIT THEN
GOTO GoodLoad
END IF
REM - Lesen ok, nächsten Chunk lesen
IF rLen& > 0 THEN GOTO ChunkLoop
IF rLen& < 0 THEN ' Lesefehler
loadError$ = "Lesefehler."
GOTO Lcleanup
END IF
REM - rLen& = 0 heißt EOF (Dateiende)
IF (foundBMHD=0) OR (foundABIT=0) OR (foundCMAP=0) THEN
loadError$ = "Wichtige IFF-Chunks nicht gefunden."
GOTO Lcleanup
END IF
GoodLoad:
loadError$ =""
REM Farbpalette
IF foundCMAP THEN
CALL LoadRGB4&(sViewPort&,ctab&,nColors%)
END IF
Lcleanup:
IF fHandle& <> 0 THEN CALL xClose&(fHandle&)
IF mybuf& <> 0 THEN CALL FreeMem&(mybuf&,mybufsize&)
RETURN
GetScrAddrs:
REM - Adressen von Screen-Structures ermitteln
sWindow& = WINDOW(7)
sScreen& = PEEKL(sWindow& + 46)
sViewPort& = sScreen& + 44
sRastPort& = sScreen& + 84
sColorMap& = PEEKL(sViewPort& + 4)
colorTab& = PEEKL(sColorMap& + 4)
sBitMap& = PEEKL(sRastPort& + 4)
REM - Screen-Parameter ermitteln
scrWidth% = PEEKW(sScreen& + 12)
scrHeight% = PEEKW(sScreen& + 14)
scrDepth% = PEEK(sBitMap& + 5)
nColors% = 2^scrDepth%
REM - Adressen der BitPlanes ermitteln
FOR kk = 0 TO scrDepth% - 1
bPlane&(kk) = PEEKL(sBitMap&+8+(kk*4))
NEXT
RETURN
spielanfang:
IF spielgewinn=1 THEN SLEEP:SYSTEM
POKE &Hdff0*256+&H96,32
DEFLNG a-z
DECLARE FUNCTION opendiskfont&() LIBRARY
LIBRARY "diskfont.library"
altfont=PEEKL(WINDOW(8)+52)
neufont$="amber.font"+CHR$(0)
hoehe=9:pref=26
text(0)=SADD(neufont$)
text(1)=(2^16)*hoehe+pref
font=opendiskfont&(VARPTR(text(0)))
IF font<>0 THEN CALL setfont&(WINDOW(8),font)
PALETTE 17,0,0,0
PALETTE 18,0,0,0
PALETTE 19,0,0,0
PALETTE 7,0.1,0.1,0.5
PALETTE 15,0.23,0.23,0.23
PALETTE 6,0.4,0,0.23
PALETTE 4,0.9,0.9,0.3
RANDOMIZE TIMER
sklaven=100:kk=500
jahre=1:anerkennung=1:pyramide=0
GOSUB sharewaremitteilung
GOSUB inhalt
gesamtuebersicht:
jahre=jahre+1
sauber
LOCATE 6,6:PRINT "Sie haben:"
COLOR 15,10: LOCATE 8,6:PRINT "Sklaven:":
COLOR 6,10:LOCATE 8,20
PRINT USING "####";sklaven
COLOR 15,10:LOCATE 10,6:PRINT "Kamele:"
COLOR 6,10:LOCATE 10,20
PRINT USING "####";kamele
COLOR 15,10:LOCATE 12,6:PRINT "Boote:"
COLOR 6,10:LOCATE 12,20
PRINT USING "####";boote
COLOR 15,10:LOCATE 14,6:PRINT "Korn Kisten:"
COLOR 6,10:LOCATE 14,20:PRINT USING "####";kk
COLOR 15,10:LOCATE 16,6:PRINT "Pyramide:"
LOCATE 17,6:PRINT "in %"
COLOR 6,10:LOCATE 16,20:PRINT INT(pyramide)
feld=0:pyramidenbau=0:steinbruch=0
SLEEP:SLEEP
IF anerkennung=1 AND jahre<=30 AND pyramide>=5 THEN GOTO bonusrunde
IF jahre>=40 AND pyramide<=7 THEN GOTO pharaotot
sauber
arbeitereinteilung:
LOCATE 6,6
PRINT "Sklaven Einteilung:"
COLOR 15,10
LOCATE 8,6
PRINT "Steinbruch:"
COLOR 7,10:LOCATE 8,23:PRINT USING "####";steinbruch
COLOR 15,10:LOCATE 10,6:PRINT "Feld:"
COLOR 7,10:LOCATE 10,23:PRINT USING "####";feld
COLOR 15,10:LOCATE 12,6:PRINT "Pyramidenbau:"
COLOR 7,10:LOCATE 12,23:PRINT USING "####";pyramidenbau
COLOR 15,10:LOCATE 14,6:PRINT "Sklaven gesamt:"
COLOR 7,10:LOCATE 14,23:PRINT USING "####";sklaven
COLOR 13,10
LOCATE 16,6:PRINT "1 -> Steinbruch"
LOCATE 17,6:PRINT "2 -> Feld"
LOCATE 18,6:PRINT "3 -> Pyramidenbau"
LOCATE 19,6:PRINT "4 -> Weiter"
arbeitereinteilungtastenabrage:
a$=INKEY$
IF a$="1" THEN arbeitersteinbruch
IF a$="2" THEN arbeiterfeld
IF a$="3" THEN arbeiterpyramidenbau
IF a$="4" THEN arbeiteressengeben
GOTO arbeitereinteilungtastenabrage
arbeitersteinbruch:
LINE (30,130)-(270,175),10,bf
COLOR 13,10
LOCATE 17,6:PRINT "Steinbruchsklaven:"
COLOR 6,10
LOCATE 18,10:INPUT "",steinbruch
IF steinbruch+feld+pyramidenbau>sklaven THEN
LOCATE 18,10:PRINT SPACE$(5):GOTO arbeitersteinbruch
END IF
LINE (30,130)-(270,175),10,bf
GOTO arbeitereinteilung
arbeiterfeld:
LINE (30,130)-(270,175),10,bf
COLOR 13,10
LOCATE 17,6:PRINT "Feldsklaven:"
COLOR 6,10
LOCATE 18,10:INPUT "",feld
IF steinbruch+feld+pyramidenbau>sklaven THEN
LOCATE 18,10:PRINT SPACE$(5):GOTO arbeiterfeld
END IF
LINE (30,130)-(270,175),10,bf
GOTO arbeitereinteilung
arbeiterpyramidenbau:
LINE (30,130)-(270,175),10,bf
COLOR 13,10
LOCATE 17,6:PRINT "Pyramidensklaven:"
COLOR 6,10
LOCATE 18,10:INPUT "",pyramidenbau
IF steinbruch+feld+pyramidenbau>sklaven THEN
LOCATE 18,10:PRINT SPACE$(5):GOTO arbeiterpyramidenbau
END IF
LINE (30,130)-(270,175),10,bf
GOTO arbeitereinteilung
arbeiteressengeben:
sauber
LOCATE 6,6
PRINT "Essens Einteilung:"
COLOR 15,10
LOCATE 8,6
PRINT "Sie haben ";kk
LOCATE 10,6
PRINT "Kisten Korn"
LOCATE 12,6
PRINT "Wieviel sollen die "
LOCATE 14,6
PRINT "Sklaven zum Essen "
LOCATE 16,6
PRINT "bekommen ?"
sklavenversorgung:
COLOR 6,10:LOCATE 18,10
INPUT "",essen
IF essen>kk THEN
LOCATE 18,10:PRINT SPACE$(5):GOTO sklavenversorgung
END IF
kk=kk-essen
SLEEP:SLEEP
GOTO sklavengestorben:
sklavengestorben:
essentot=sklaven-essen
IF essen<=sklaven THEN sklaventot=RND(1)*essentot+8
IF essen>=sklaven THEN sklaventot=RND(1)*5
IF sklaventot<=0 THEN sklaventot=1
IF sklaventot>=sklaven THEN sklaventot=sklaven:sklaven=0
sauber
LOCATE 6,6:PRINT "Slavenverluste:"
COLOR 15,10:LOCATE 8,6:PRINT "Sie gaben den"
LOCATE 9,6:PRINT "Sklaven :":COLOR 7,10:LOCATE 9,21:PRINT USING "#####";essen
COLOR 15,10:LOCATE 10,6:PRINT "Kisten Korn"
LOCATE 12,6:PRINT "An Krankheiten und"
LOCATE 13,6:PRINT "Arbeit sind ihnen"
LOCATE 14,6:PRINT "dieses Jahr: ":COLOR 7,10
LOCATE 14,21:PRINT USING "#####";sklaventot
COLOR 15,10:LOCATE 15,6:PRINT "Sklaven gestorben"
sklaven=sklaven-sklaventot
IF sklaven<=0 THEN sklaven=0:sklaventot=0
LOCATE 17,6:PRINT "Sie haben noch:":COLOR 7,10
LOCATE 17,21:PRINT USING "#####";sklaven
COLOR 15,10:LOCATE 18,6:PRINT "Sklaven"
SLEEP:SLEEP
GOTO kostenkameleboote
kostenkameleboote:
sauber
kamelfressen=kamele*2
bootwartungskosten=boote*3
kk=kk-(kamelfressen+bootwartungskosten)
IF kk<=0 THEN bootpfaendung
LOCATE 6,6
PRINT "Unkosten:"
COLOR 15,10
LOCATE 8,6:PRINT "Die Kamele"
LOCATE 9,6:PRINT "fressen:":COLOR 7,10:LOCATE 9,21
PRINT USING "#####";kamelfressen
COLOR 15,10:LOCATE 10,6:PRINT "Kisten Korn"
LOCATE 12,6:PRINT "Die Wartung der"
LOCATE 13,6:PRINT "Boote kostet:":COLOR 7,10
LOCATE 13,21:PRINT USING "#####";bootwartungskosten
COLOR 15,10:LOCATE 14,6:PRINT "Korn Kisten"
LOCATE 16,6:PRINT "Sie haben:":COLOR 7,10:LOCATE 16,21
PRINT USING "#####";kk
COLOR 15,10:LOCATE 17,6:PRINT "Korn Kisten"
SLEEP:SLEEP
GOTO bootekamelekaufen:
bootekamelekaufen:
sauber
LOCATE 6,6
PRINT "Markttag:"
COLOR 15,10
LOCATE 8,6:PRINT "Sie haben:"
COLOR 15,10: LOCATE 10,6:PRINT "Sklaven:":
COLOR 7,10:LOCATE 10,20
PRINT USING "####";sklaven
COLOR 15,10:LOCATE 11,6:PRINT "Kamele:"
COLOR 7,10:LOCATE 11,20
PRINT USING "####";kamele
COLOR 15,10:LOCATE 12,6:PRINT "Boote:"
COLOR 7,10:LOCATE 12,20
PRINT USING "####";boote
COLOR 15,10:LOCATE 13,6:PRINT "Korn Kisten:"
COLOR 7,10:LOCATE 13,20:PRINT USING "####";kk
COLOR 13,10
LOCATE 16,6:PRINT "1 -> Boote handeln"
LOCATE 17,6:PRINT "2 -> Kamele handeln"
LOCATE 18,6:PRINT "3 -> Sklaven handeln"
LOCATE 19,6:PRINT "4 -> Weiter"
bootekameletastenabfrage:
a$=INKEY$
IF a$="1" THEN bootehandeln
IF a$="2" THEN kamelehandeln
IF a$="3" THEN sklavenhandeln
IF a$="4" THEN kornernte
GOTO bootekameletastenabfrage
bootehandeln:
IF booteanzeige=1 THEN booteanzeigen
bootpreis=(kk*RND(2)+boote)
IF bootpreis<=30 THEN bootpreis=50
bootkaufpreis=(kk*RND(2)-kk*RND(1))
IF bootkaufpreis<=30 THEN bootkaufpreis=50
IF bootkaufpreis>bootpreis THEN bootehandeln
booteanzeige=1
booteanzeigen:
sauber
booteanzeigen1:
LOCATE 6,6:PRINT "Boote handeln"
COLOR 15,10:LOCATE 8,6
PRINT "Der Makler nimmt"
LOCATE 9,6:PRINT "folgende Preise:"
LOCATE 11,6:PRINT "Boot kaufen: "
COLOR 2,10:LOCATE 11,21:PRINT USING "####";bootpreis
COLOR 15,10:LOCATE 12,6:PRINT "Boot verkaufen:"
COLOR 2,10:LOCATE 12,21:PRINT USING "####";bootkaufpreis
COLOR 2,10:LOCATE 14,6:PRINT "Sie haben:":COLOR 15,10
LOCATE 15,6:PRINT "Boote:":COLOR 7,10
LOCATE 15,21:PRINT USING "####";boote
COLOR 15,10:LOCATE 16,6:PRINT "Korn Kisten:":COLOR 7,10
LOCATE 16,21:PRINT USING "####";kk
COLOR 13,10:LOCATE 17,6:PRINT "1 -> Boot kaufen"
LOCATE 18,6:PRINT "2 -> Boot verkaufen"
LOCATE 19,6:PRINT "3 -> Weiter"
bootehandelntastaturabfrage:
a$=INKEY$
IF a$="1" THEN bootkaufen
IF a$="2" THEN bootverkaufen
IF a$="3" THEN bootekamelekaufen
GOTO bootehandelntastaturabfrage
bootkaufen:
IF kk<bootpreis THEN booteanzeigen1
kk=kk-bootpreis:boote=boote+1
GOTO booteanzeigen1
bootverkaufen:
IF boote<1 THEN booteanzeigen1
boote=boote-1
kk=kk+bootkaufpreis
GOTO booteanzeigen1
kamelehandeln:
IF kameleanzeige=1 THEN kameleanzeigen
kamelpreis=(100*RND(2)+kamele)
IF kamelpreis<=15 THEN kamelpreis=50
kamelkaufpreis=(100*RND(1)-kamele*RND(1))
IF kamelkaufpreis<=15 THEN kamelkaufpreis=50
IF kamelkaufpreis>kamelpreis THEN kamelehandeln
kameleanzeige=1
kameleanzeigen:
sauber
kameleanzeigen1:
LOCATE 6,6:PRINT "Kamele handeln"
COLOR 15,10:LOCATE 8,6
PRINT "Der Makler nimmt"
LOCATE 9,6:PRINT "folgende Preise:"
LOCATE 11,6:PRINT "Kamel kaufen: "
COLOR 2,10:LOCATE 11,23:PRINT USING "####";kamelpreis
COLOR 15,10:LOCATE 12,6:PRINT "Kamel verkaufen:"
COLOR 2,10:LOCATE 12,23:PRINT USING "####";kamelkaufpreis
COLOR 2,10:LOCATE 14,6:PRINT "Sie haben:":COLOR 15,10
LOCATE 15,6:PRINT "Kamele:":COLOR 7,10
LOCATE 15,23:PRINT USING "####";kamele
COLOR 15,10:LOCATE 16,6:PRINT "Korn Kisten:":COLOR 7,10
LOCATE 16,23:PRINT USING "####";kk
COLOR 13,10:LOCATE 17,6:PRINT "1 -> Kamel kaufen"
LOCATE 18,6:PRINT "2 -> Kamel verkaufen"
LOCATE 19,6:PRINT "3 -> Weiter"
kamelhandelntastaturabfrage:
a$=INKEY$
IF a$="1" THEN kamelkaufen
IF a$="2" THEN kameleverkaufen
IF a$="3" THEN bootekamelekaufen
GOTO kamelhandelntastaturabfrage
kamelkaufen:
IF kk<kamelpreis THEN kameleanzeigen1
kk=kk-kamelpreis:kamele=kamele+1
GOTO kameleanzeigen1
kameleverkaufen:
IF kamele<1 THEN kameleanzeigen1
kamele=kamele-1
kk=kk+kamelkaufpreis
GOTO kameleanzeigen1
sklavenhandeln:
IF sklavenanzeige=1 THEN sklavenanzeigen
sklavenpreis=(10*RND(2)+5)
IF sklavenpreis<=6 THEN sklavenpreis=6
sklavenkaufpreis=(8*RND(2)+4)
IF sklavenkaufpreis<=4 THEN sklavenkaufpreis=5
IF sklavenkaufpreis>sklavenpreis THEN sklavenhandeln
sklavenanzeige=1
sklavenanzeigen:
sauber
sklavenanzeigen1:
LOCATE 6,6:PRINT "Sklaven handeln"
COLOR 15,10:LOCATE 8,6
PRINT "Der Makler nimmt"
LOCATE 9,6:PRINT "folgende Preise:"
LOCATE 11,6:PRINT "Sklave kaufen: "
COLOR 2,10:LOCATE 11,23:PRINT USING "####";sklavenpreis
COLOR 15,10:LOCATE 12,6:PRINT "Sklave verkaufen:"
COLOR 2,10:LOCATE 12,23:PRINT USING "####";sklavenkaufpreis
COLOR 2,10:LOCATE 14,6:PRINT "Sie haben:":COLOR 15,10
LOCATE 15,6:PRINT "Sklaven:":COLOR 7,10
LOCATE 15,23:PRINT USING "####";sklaven
COLOR 15,10:LOCATE 16,6:PRINT "Korn Kisten:":COLOR 7,10
LOCATE 16,23:PRINT USING "####";kk
COLOR 13,10:LOCATE 17,6:PRINT "1 -> Sklave kaufen"
LOCATE 18,6:PRINT "2 -> Sklave verkaufen"
LOCATE 19,6:PRINT "3 -> Weiter"
sklavenhandelntastaturabfrage:
a$=INKEY$
IF a$="1" THEN sklavenkaufen
IF a$="2" THEN sklavenverkaufen
IF a$="3" THEN bootekamelekaufen
GOTO sklavenhandelntastaturabfrage
sklavenkaufen:
IF kk<sklavenpreis THEN sklavenanzeigen1
kk=kk-sklavenpreis:sklaven=sklaven+1
GOTO sklavenanzeigen1
sklavenverkaufen:
IF sklaven<1 THEN sklavenanzeigen1
sklaven=sklaven-1
kk=kk+sklavenkaufpreis
GOTO sklavenanzeigen1
kornernte:
booteanzeige=0:kameleanzeige=0
sklavenanzeige=0:sauber
RANDOMIZE TIMER
wetter=RND(1)
IF wetter<0.4 THEN ernte=INT(kk*(RND(1)*(0.4-wetter))+(RND(1)*feld))
ernte=INT(kk*(RND(1)*(wetter))+(RND(1)*feld))
IF feld=0 THEN ernte=0
IF kk=0 THEN ernte=0
kk=kk+ernte
LOCATE 6,6:PRINT "Kornernte:"
LOCATE 8,6:COLOR 15,10
PRINT "Die Sklaven ernteten"
LOCATE 10,6:PRINT "dieses Jahr:"
LOCATE 13,6
PRINT "Die Ernte:"
COLOR 7,10:LOCATE 13,21:PRINT USING "#####";ernte
COLOR 15,10:LOCATE 15,6:PRINT "Korn Kisten:"
LOCATE 16,6:PRINT "gesamt":COLOR 7,10
LOCATE 15,21:PRINT USING "#####";kk
SLEEP:SLEEP
GOTO steinbruchanzeige
steinbruchanzeige:
sauber
steine=RND(1)*steinbruch
steinlager=steinlager+steine
LOCATE 6,6:PRINT "Steinbruch:"
COLOR 15,10:LOCATE 8,6
PRINT "Die Sklaven brachen"
LOCATE 10,6:PRINT "dieses Jahr:"
LOCATE 13,6:PRINT "Steine:"
COLOR 7,10:LOCATE 13,21:PRINT USING "####";steine
COLOR 15,10:LOCATE 15,6:PRINT "Steine im "
LOCATE 16,6:PRINT "Lager:":COLOR 7,10
LOCATE 16,21:PRINT USING "####";steinlager
SLEEP:SLEEP
GOTO foerderanzeige
foerderanzeige:
sauber
boottransport=9*boote
IF boottransport>steinlager THEN boottransport=steinlager:steinlager=0:GOTO foerderanzeige1
steinlager=steinlager-boottransport
IF steinlager<=0 THEN kameltransport=0:GOTO foerderanzeige1
kameltransport=3*kamele
IF kameltransport>steinlager THEN kameltransport=steinlager:steinlager=0:GOTO foerderanzeige1
steinlager=steinlager-kameltransport
foerderanzeige1:
LOCATE 6,6:PRINT "Transport:"
COLOR 15,10:LOCATE 8,6
PRINT "Steine im"
LOCATE 9,6:PRINT "Lager: ":LOCATE 9,21:COLOR 7,10
PRINT USING "####";steinlager
COLOR 15,10:LOCATE 11,6:PRINT "Folgende Steine":LOCATE 12,6
PRINT "koennen von Booten":LOCATE 13,6
PRINT "und Kamelen abgeholt":LOCATE 14,6:PRINT "werden:"
LOCATE 16,6:PRINT "Boote: ":LOCATE 16,21:COLOR 7,10
PRINT USING "####";boottransport
COLOR 15,10:LOCATE 18,6:PRINT "Kamele:":LOCATE 18,21:COLOR 7,10
PRINT USING "####";kameltransport
SLEEP:SLEEP
GOTO pyramidenbauanzeige
pyramidenbauanzeige:
sauber
IF pyramidenbau<>0 THEN verbrauchtesteine=INT(pyramidenbau/4) :ELSE verbrauchtesteine=0
pyramidensteine=pyramidensteine+kameltransport+boottransport-verbrauchtesteine
IF pyramidensteine<=0 THEN verbrauchtesteine=pyramidensteine
IF verbrauchtesteine>pyramidensteine THEN verbrauchtesteine=pyramidensteine
rechensteine=rechensteine+verbrauchtesteine
IF pyramide>99 THEN spielgewinn
pyramide=rechensteine*100/1000
LOCATE 6,6:PRINT "Pyramidenbau:"
COLOR 15,10:LOCATE 8,6
PRINT "Steine bei: ":LOCATE 8,23:COLOR 7,10:PRINT USING"####";pyramidensteine
COLOR 15,10:LOCATE 9,6:PRINT "der Pyramide"
COLOR 15,10:LOCATE 11,6:PRINT "Verbrauchte":LOCATE 12,6:PRINT "Steine:"
COLOR 7,10:LOCATE 12,23:PRINT USING "####";verbrauchtesteine
COLOR 15,10:LOCATE 14,6:PRINT "Pyramide fertig:":LOCATE 15,6:PRINT "in %"
COLOR 7,10:LOCATE 14,23:PRINT pyramide
SLEEP:SLEEP
GOTO gesamtuebersicht
bootpfaendung:
IF boote=0 THEN kamelpfaendung
boote=boote-1:kk=kk+bootkaufpreis
IF kk=kk<=0 THEN bootpfaendung
GOTO pfaendungstart
kamelpfaendung:
IF kamele=0 THEN GOTO pfaendungstart
kamele=kamele-1:kk=kk+kamelkaufpreis
IF kk<=0 THEN kamelpfaendung
pfaendungstart:
IF kk<=0 THEN kk=0
sauber
LOCATE 6,6:PRINT "Pfaendung:"
COLOR 15,10
LOCATE 8,6:PRINT "Um ihre Schulden"
LOCATE 10,6:PRINT "auszugleichen wurden "
LOCATE 12,6:PRINT "Ihnen Boote und "
LOCATE 14,6:PRINT "Kamele Gepfaendet !!!"
SLEEP:SLEEP
GOTO bootekamelekaufen:
bonusrunde:
sauber
COLOR 15,10
anerkennungssklaven=RND(1)*40
anerkennung=0
LOCATE 6,6:PRINT "Der Hofmeister dankt"
LOCATE 7,6:PRINT "Dir fuer Deine gute "
LOCATE 8,6:PRINT "Arbeit und schenkt "
LOCATE 9,6:PRINT "Dir als Anerkennung:"
LOCATE 11,6:PRINT "Sklaven:":LOCATE 11,21:COLOR 7,10
PRINT USING "#####";anerkennungssklaven
sklaven=sklaven+anerkennungssklaven
SLEEP:SLEEP
sauber
GOTO arbeitereinteilung
pharaotot:
sauber
LOCATE 6,6:PRINT "Der Pharao Cool Cat"
LOCATE 7,6:PRINT "ist leider gestorben."
LOCATE 8,6:PRINT "Da Sie die Pyramide "
LOCATE 9,6:PRINT "noch nicht fertig "
LOCATE 10,6:PRINT "haben, haben Sie "
LOCATE 11,6:PRINT "jetzt keine gute "
LOCATE 12,6:PRINT "Zukunft !!"
LOCATE 13,6:PRINT "Leider ist ihr Leben"
LOCATE 14,6:PRINT "nun zuende, und damit"
LOCATE 15,6:PRINT "auch das Spiel !!"
spielgewinn=1
SLEEP:SLEEP:SLEEP
GOTO spielanfang
spielgewinn:
spielgewinn=1
sauber
LOCATE 6,6:PRINT "Der Pharao Cool Cat"
LOCATE 7,6:PRINT "ist hoch erfreut "
LOCATE 8,6:PRINT "ueber Ihre so gute"
LOCATE 9,6:PRINT "Arbeit. Als Lohn"
LOCATE 10,6:PRINT "werden Sie nun mit"
LOCATE 11,6:PRINT "Gold aufgewogen."
LOCATE 12,6:PRINT "Ihnen steht eine"
LOCATE 13,6:PRINT "erfolgreiche Zukunft"
LOCATE 14,6:PRINT "ins Haus. Sie haben"
LOCATE 15,6:PRINT "ausgesorgt !!"
COLOR 7,10
LOCATE 17,6:PRINT "Herzlichen"
LOCATE 18,7:PRINT "Glueckwunsch !!"
SLEEP:SLEEP:SLEEP
GOTO spielanfang
SUB sp(schreib$) STATIC
CALL text (WINDOW(8),SADD(schreib$),LEN(schreib$))
END SUB
SUB sauber STATIC
FOR i=1 TO 70
LINE (30+i,35+i)-(270-i,175-i),10,b
REM FOR a=1 TO 200:NEXT
NEXT
LINE (30,130)-(270,175),10,bf
COLOR 2,10
END SUB
inhalt:
sauber
COLOR 2,10
LOCATE 6,10
CALL setdrmd&(WINDOW(8),0)
POKE WINDOW (8)+56,2
PRINT "Pyramide "
POKE WINDOW (8)+56,4
LOCATE 8,5:COLOR 7,10
CALL sp("Sie sind der Baumeister")
LOCATE 9,5
CALL sp("von Pharao CoolCat.")
LOCATE 10,5
CALL sp("Seine Zeit ist am Ende,")
LOCATE 11,5
CALL sp("und Sie sollen ihm eine")
LOCATE 12,5
CALL sp("Pyramide bauen. Wenn")
LOCATE 13,5
CALL sp("Sie es schaffen, so")
LOCATE 14,5
CALL sp("werden Sie mit Gold ")
LOCATE 15,5
CALL sp("aufgewogen. Wenn Sie")
LOCATE 16,5
CALL sp("jedoch versagen, so")
LOCATE 17,5
CALL sp("dienen Sie als Futter")
LOCATE 18,5
CALL sp("fuer die Krokodile !!")
CALL setdrmd&(WINDOW(8),1)
POKE WINDOW (8)+56,0
SLEEP:SLEEP
RETURN
sharewaremitteilung:
COLOR 2,10
LOCATE 6,6
CALL setdrmd&(WINDOW(8),0)
POKE WINDOW (8)+56,3
PRINT "Autorenmitteilung:"
POKE WINDOW (8)+56,4
COLOR 15,10:LOCATE 8,6
PRINT "Dieses Spiel wurde"
LOCATE 9,6
PRINT "programmiert von:"
COLOR 4,10:LOCATE 10,7
PRINT "Martin Jochimczyk"
LOCATE 11,7:PRINT "Am Sande 12"
POKE WINDOW (8)+56,5
LOCATE 12,7:PRINT "D-2723 Scheessel"
POKE WINDOW (8)+56,4
COLOR 15,10
LOCATE 14,6
PRINT "Solange mein Name"
LOCATE 15,6
PRINT "im Programm bleibt"
LOCATE 16,6
PRINT "darf das Programm "
LOCATE 17,6
PRINT "weitergegeben werden"
LOCATE 19,6:PRINT "Viel Spass!"
SLEEP:SLEEP
RETURN